同步電動機運行穩(wěn)定性和可靠性對工業(yè)生產(chǎn)有重要的影響。單片機用于同步電動機勵磁控制,由于軟件豐富,能使勵磁裝置結(jié)構(gòu)簡化、功能增多且易于實現(xiàn)復(fù)雜的控制規(guī)律,同時還具有參數(shù)整定靈活,使用維護方便和故障自診斷功能。目前,國內(nèi)許多基于單片機的同步電動機勵磁控制系統(tǒng)與傳統(tǒng)的模擬勵磁控制系統(tǒng)相比性能有很大的提高,但因為采用的單片機內(nèi)部資源較少使得單片機外圍電路復(fù)雜,其內(nèi)部控制程序采用查表的方法,這樣影響了整個勵磁控制系統(tǒng)的精度、快速性和穩(wěn)定性。PIC16F877單片機內(nèi)部資源豐富,廣泛應(yīng)用于工業(yè)控制領(lǐng)域。我們研制了基于PIC16F877單片機的同步電動機新型智能勵磁控制系統(tǒng),控制程序可以實時計算,利用內(nèi)部的捕捉單元可以很容易實現(xiàn)自動投勵、全壓投切電路。同時我們通過控制晶閘管移相整流模塊的控制端電壓來控制整流模塊的輸出,使得整個系統(tǒng)硬件電路簡單、調(diào)試維護方便、系統(tǒng)性能較高。
PIC單片機簡介
1.PIC單片機(Peripheral Interface Controller)是一種用來開發(fā)和控制外圍設(shè)備的集成電路(IC)。一種具有分散作用(多任務(wù))功能的CPU。與人類相比,大腦就是CPU,PIC 共享的部分相當于人的神經(jīng)系統(tǒng)。
2.PIC單片機是一個小的計算機。
3.PIC單片機有計算功能和記憶內(nèi)存像CPU并由軟件控制運行。然而,處理能力—般,存儲器容量也很有限,這取決于PIC的類型。但是它們的最高操作頻率大約都在20MHz左右,存儲器容量用做寫程序的大約1K—4K字節(jié)。
時鐘頻率與掃描程序的時間和執(zhí)行程序指令的時間有關(guān)系。但不能僅以時鐘頻率來判斷程序處理能力,它還隨處理裝置的體系結(jié)構(gòu)改變(1*)。如果是同樣的體系結(jié)構(gòu),時鐘頻率較高的處理能力會較強。
PIC單片機詳細介紹
這里用字來解釋程序容量。用一個指令(2*)表示一個字。通常用字節(jié)(3*)來表示存儲器(4*)容量。一個字節(jié)有8位,每位由1或0組成。PIC16F84A單片機的指令由14位構(gòu)成。當把1K個指令轉(zhuǎn)換成位為:1 x 1,024 x 14 = 14,336位。再轉(zhuǎn)換為字節(jié)為:14,336/(8 x 1,024) = 1.75K。在計算存儲器的容量時,我們規(guī)定 1G 字節(jié) = 1,024M 字節(jié), 1M 字節(jié) = 1,024K 字節(jié), 1K 字節(jié)= 1,024 位. 它們不是以1000為倍數(shù),因為這是用二進制計算的緣故。
1*計算機的物理結(jié)構(gòu),包括組織結(jié)構(gòu)、容量、該計算機的CPU、存儲器以及輸入輸出設(shè)備間的互連。經(jīng)常特指CPU的組織結(jié)構(gòu),包括它的寄存器、標志、總線、算術(shù)邏輯部件、指令譯碼與執(zhí)行機制以及定時和控制部件。
2*指出某種操作并標識其操作數(shù)(如果有操作數(shù)的話)的一種語言構(gòu)造
3*作為一個單位來操作(運算)的一個二進制字符串,通常比計算機的一個字短。
4*處理機內(nèi)的所有可尋址存儲空間以及用于執(zhí)行指令的其它內(nèi)存儲器。
在計算存儲器的容量時,我們規(guī)定 1G 字節(jié) = 1,024M 字節(jié), 1M 字節(jié) = 1,024K 字節(jié), 1K 字節(jié)= 1,024 字節(jié). 它們不是以1000為倍數(shù),因為這是用二進制計算的緣故。
用PIC單片機使電路做的很小巧變得可能。
因為PIC單片機可以把計算部分、內(nèi)存、輸入和輸出等都做在一個芯片內(nèi)。所以她工作起來效率很高、功能也自由定義還可以靈活的適應(yīng)不同的控制要求,而不必去更換不同的IC。這樣電路才有可能做的很小巧。
PIC單片機命名規(guī)則
PIC XX XXX XXX (X) -XX X /XX
1 2 3 4 5 6 7 8
1.前綴: PIC MICROCHIP 公司產(chǎn)品代號,特別地:dsPIC為集成DSP功能的新型PIC單片機
2.系列號:10、12、16、18、24、30、33、32,其中
PIC10、PIC12、PIC16、PIC18為8位單片機
PIC24、dsPIC30、dsPIC33為16位單片機
PIC32為32位單片機
3.器件型號(類型):
C CMOS 電路
CR CMOS ROM
LC 小功率CMOS 電路
LCS 小功率保護
AA 1.8V
LCR 小功率CMOS ROM
LV 低電壓
F 快閃可編程存儲器
HC 高速CMOS
FR FLEX ROM
4.改進類型或選擇
54A 、58A 、61 、62 、620 、621
622 、63 、64 、65 、71 、73 、74
42 、43 、44等
5.晶體標示:
LP 小功率晶體,
RC 電阻電容,
XT 標準晶體/振蕩器
HS 高速晶體
6.頻率標示:
-02 2MHZ,
-04 4MHZ,
-10 10MHZ,
-16 16MHZ
-20 20MHZ,
-25 25MHZ,
-33 33MHZ
7.溫度范圍:
空白 0℃至70℃,
I -45℃至85℃,
E -40℃至125℃
8.封裝形式:
L PLCC 封裝
JW 陶瓷熔封雙列直插,有窗口
P 塑料雙列直插
PQ 塑料四面引線扁平封裝
W 大圓片
SL 14腿微型封裝-150mil
JN 陶瓷熔封雙列直插,無窗口
SM 8腿微型封裝-207mil
SN 8腿微型封裝-150 mil
VS 超微型封裝8mm×13.4mm
SO 微型封裝-300 mil
ST 薄型縮小的微型封裝-4.4mm
SP 橫向縮小型塑料雙列直插
CL 68腿陶瓷四面引線,帶窗口
SS 縮小型微型封裝
PT 薄型四面引線扁平封裝
TS 薄型微型封裝8mm×20mm
TQ 薄型四面引線扁平封裝
pic單片機選型技巧
(1)“芯片含有(功能或數(shù)量)略大于設(shè)計需求”,“設(shè)計需求盡可能(用)芯片完成(少用外圍器件)”; ?。?span style="font-size: 14px; font-family: Calibri;">2)“選大(大廠)不選小,選多(供應(yīng)量多)不選少,選名(名牌)不選渺(飄渺,不知詳情的廠子),選廉(廉價)但要好(質(zhì)量保證)”。具體要從單片機應(yīng)用的技術(shù)性、實用性和開可發(fā)性等方面來考慮:
1、內(nèi)存
單片機FLASH的容量根據(jù)程序的大小確定,FLASH容量必須大于代碼量。舉例來說,如果你的代碼量大約50 KB,那么建議你選擇FLASH容量為64 KB或128 KB的單片機。
2、速度
單片機的運行速度首先看時鐘頻率,一般情況對于同一種結(jié)構(gòu)的單片機,時鐘頻率越高速度越快。如果你的設(shè)計對速度要求很高,那么要選擇一個運行速度較快的單片機。例如,一般情況下,電機控制應(yīng)用大多采用100ksps或更高的采樣速率,因此當單片機用于電機控制時,時鐘頻率要足夠高??傊?,在選用單片機時要根據(jù)產(chǎn)品需要選擇時鐘頻率,不要片面追求高速度,時鐘頻率越高功耗也就越大。此外,單片機的穩(wěn)定性、抗干擾性等參數(shù)基本上跟單片機的運行速度成反比。因此,要盡量尋找可以在很高的時鐘頻率下運行而功耗又不高的單片機。
3、外設(shè)需求
如果你的設(shè)計需要ADC、SPI、GPIO、USB等之類的外設(shè),那么你需要尋找一款集成所有這些外設(shè)的單片機。因為,使用一個具有上述外設(shè)的單片機顯然比使用一個普通的單片機及外圍加一個單獨的ADC更為經(jīng)濟。此外,外設(shè)集成于單片機同時也意味著更低的功耗,因為沒有可以產(chǎn)生功耗的外圍電路,也沒有用于連接外圍電路的能產(chǎn)生功耗的敷銅,只有單片機本身產(chǎn)生功耗。
4、方便的開發(fā)工具
這是個非常重要的方面,因為開發(fā)工具可以極大地影響你所設(shè)計的產(chǎn)品的功耗。很多公司都已經(jīng)開發(fā)出了具有代碼優(yōu)化功能的編譯器,所以當你編譯代碼的時候,編譯器會告知具體編譯信息,你可以根據(jù)編譯信息優(yōu)化代碼以降低功耗。舉例來說,如果你的設(shè)計需要用到ADC、UART和GPIO等外設(shè),你就需要初始化這些器件,但是設(shè)計中使用UART是有條件的(僅用于調(diào)試時顯示結(jié)果),此時編譯器會提示你禁用這個外設(shè)以降低功耗。必須得說這種智能化的開發(fā)工具對開發(fā)者來說是一種福音。
5、未來需求和兼容性
設(shè)計者在設(shè)計產(chǎn)品時需要考慮產(chǎn)品未來可能需要升級等之類的問題。例如,若需要給設(shè)計增加某些功能,那么可能需要增加內(nèi)存、外設(shè)等,還可能需要加提高單片機的運行速度。因此,在單片機的選型上需要在當前設(shè)計需求以及未來設(shè)計上尋找平衡,以滿足不同程度的要求。
6、成本
一個好的設(shè)計不僅要功能完善,而且要滿足成本要求,如果無法控制成本,再好的設(shè)計也是枉然。因此,需要盡可能地降低單片機甚至整個產(chǎn)品的成本。
7、工作電壓(VCC)
單片機的工作電壓是指可以讓其正常工作所需要提供的電壓。工作電壓越高,單片機的功耗也就越大。因此,為了降低產(chǎn)品功耗,必須要盡可能地降低工作電壓。
除此之外,我還要建議設(shè)計者根據(jù)具體產(chǎn)品需求選擇合適芯片架構(gòu)。若僅是個簡單的控制應(yīng)用(如照明系統(tǒng)、電子玩具等),那么并不需要一個像ARM那樣具有復(fù)雜架構(gòu)的芯片。此外,對于低功耗設(shè)計,單片機必須具有睡眠模式,基于中斷操作的睡眠模式/低功耗模式的使用是降低功耗的一個標準的行業(yè)慣例。
最后再來一句老生常談:不要拘泥與芯片是否先進,單片機只是一個工具,真正的功夫在于你的專業(yè)知識,要用最合適的芯片做出最合適的產(chǎn)品。
PIC單片機常用指令
#include 或 include
#include 偽指令的作用是把另外一個文件的內(nèi)容全部包含復(fù)制到本偽指令所在的位置。被包含復(fù)制的文件可以是任何形式的文本文件,當然文件中的內(nèi)容和語法結(jié)構(gòu)必須是MPASM 能夠識別的。最經(jīng)常被“include”的是針對 PIC 單片機內(nèi)部特殊功能寄存器定義的包 含 頭 文 件 , 在MPLAB安 裝 后 它 們 全 部 放 在 路 徑 “ C:Program FilesMPLAB IDEMCHIP_Tools”下,每一個型號的 PIC 單片機都有一個對應(yīng)的預(yù)定義包含頭文件,擴展名是“.inc”。除了一些符號預(yù)定義文件,你也可以把現(xiàn)有的其它程序文件作為一個代碼模塊直接“包含”進來作為自己程序的一部分。見例 3-01。
#include 把預(yù)定義的 PIC16F877A 寄存器符號包含到此處
#include ”math.asm” 把現(xiàn)有的程序文件包含進來作為自己代碼的一部分
例 3-01
請注意被包含文件的引用方式。一種是《》尖括號引用,這種引用意味著讓編譯器去默認的路徑下尋找該文件,MPASM默認的寄存器預(yù)定義文件存放路徑即為上面提及的MPLAB 安裝后的目錄;另一種是””雙引號引用,這種引用方式的意思是指示編譯器從引號中指定的全程文件路徑下尋找該文件。例 3-01 中”math.asm”沒有指定路徑,即意味著在當前項目路徑下尋找 math.asm 文件。如果編譯器找不到被包含的文件,將會有錯誤信息告知。請在你的源程序中盡量用 MPLAB 標準頭文件定義的寄存器符號。一來這些被定義的寄存器符號和芯片數(shù)據(jù)手冊上的描述一一對應(yīng),理解起來即直觀又容易;二來如果用你自己定義符號就缺乏一個大家能一起交流的標準平臺,其他人要解讀你的代碼時將費時費力。故例3-01 中的首行#include 包含引用偽指令可以說是 PIC 單片機程序編寫時的標準必備。
list
list 偽指令可以設(shè)定程序編譯時的一些信息,例如所選單片機的型號,編譯時選擇的缺省數(shù)制等。例如:
list p=16f877a, r=DEC 單片機型號為 PIC16F877A,無特別指明的數(shù)字為十進制數(shù)
例 3-02
如果程序開發(fā)時使用項目管理的模式,則所有 list 偽指令可以描述的參數(shù)項都可以在項目的設(shè)定選項中通過對話框的形式設(shè)定并保存。在此只需對 list 偽指令稍作了解即可。
__config
此偽指令的重要作用是把芯片的配置字設(shè)定在源程序中,請參閱 2.5 節(jié)的詳細說明。建議大家盡量用此偽指令把芯片的配置字寫在程序中。
__idlocs
PIC 單片機中有一處非常特殊的標記單元。它獨立于任何其它存儲器,唯一的作用就是作為一個標記。此標記值無法用軟件讀到,讀取和寫入的方法只有通過編程器實現(xiàn)。此標記值沒有讀保護,你可以利用它存放程序的版本或日期等信息。如果需要,則可以用偽指令 __idloc 在程序中定義具體的值。
__idloc 0x1234
設(shè)定芯片的標記值為 0x1234,注意前面有兩個下劃線符
例 3-03
和__config 偽指令定義的配置字一樣,用__idloc 定義的芯片標記值在最后也會存放在HEX 文件中,這就要求編程器能夠解析它。
errorlevel
errorlevel 的用途是控制編譯信息的輸出顯示。編譯器在編譯你的源程序時會提供很多信息,有些信息是你必須要處理的,例如錯誤信息(Error),只要有錯誤信息存在,你的程序?qū)⒂肋h無法完成編譯;有些可能只需要關(guān)注,例如警告信息(Warning);也有一些可能你根本就不感興趣,它們只是一些提示信息(Message)而已。注意出現(xiàn)警告和提示信息時將不會中止編譯器的編譯工作,你的程序?qū)⒈痪幾g并最終產(chǎn)生 HEX 文件。圖 3-14 中顯示了一個程序編譯后的各種信息實例,其中既有錯誤信息,也有警告和提示信息。我們可以用errorlevel 偽指令來控制輸出信息的級別,或刻意關(guān)閉/打開一些提示信息。
編譯信息的輸出顯示級別有三種,分別是 0、1 和 2。級別 0 代表顯示所有信息,包括各種錯誤、警告和提示信息,如圖 3-14 所示;級別 1 代表顯示錯誤和警告信息,忽略提示信息;級別 3 代表只顯示錯誤信息而忽略警告和提示信息。在任何一個大的級別上還可以對某些信息單獨設(shè)定顯示或關(guān)閉。每個信息都有一個識別標號,見圖 3-14 中信息項“[]”中的數(shù)字,打開或關(guān)閉某類信息只需在 errorlevel 偽指令中引用信息識別標號,并在其前面用“+”或“-”號,即代表打開或關(guān)閉這一類信息,例如:
errorlevel 0, -302, -305 顯示所有信息,但不需要 302 和 305 這兩類提示信息
errorlevel 1, +305 顯示錯誤和警告信息,但同時還要關(guān)注 305 類的提示信息
#define / #undefine 例 3-04
#define 的作用是定義常數(shù)符號,即用一個符號變量替換另一個符號串或變量。被替換的可以是任意字母數(shù)字組成的符號但替換者本身不能是一個純數(shù)字。例如:
#define DELAY_TIME 1000 定義常數(shù)符號,即用 DELAY_TIME 符號代替 1000
#define KEY1 PORTB,7 用 KEY1 符號代替端口 PORTB 的第 7 引腳 例 3-05
用#define 偽指令定義符號后,可使程序中的變量或指令變得更具實際意義,也使程序變得更易維護。
指令“btfss PORTB,7”和“btfss KEY1”在事先用了例 3-05 中的#define 后編譯的結(jié)果是一樣的,但明顯地后者看起來更容易理解,一看就知道這是在測試編號為KEY1 的一個按鍵。
PIC指令功能分類表
類型 助記符 操作說明 命令說明
傳 送 類 MOVF F,dF→d 將F寄存器的內(nèi)容傳送到F本身(d=1)或W(d=0)(影響狀態(tài)位)Z
MOVWF FW→F 將W寄存器的內(nèi)容傳送到F,W內(nèi)容不變-
MOVLW KK→W 將8位立即數(shù)傳送到W寄存器-
SWAPF F,dF半字節(jié)交換→dF寄存器的高4位和低4位交換位置后,結(jié)果存入F本身(d=1)或W(d=0)中-
算 術(shù) 運 算 類 ADDWF F,dF+W→dW寄存器的內(nèi)容和F寄存器的內(nèi)容相加,結(jié)果存入F(d=1)或W(d=0)中C,DC,Z
ADDLW F,dK+W→WW寄存器的內(nèi)容和8位立即數(shù)相加,結(jié)果存入WC,DC,Z
INCF F,dF+1→dF寄存器的內(nèi)容加1后,結(jié)果存入W(d=0)或F(d=1)中Z
SUBWF F,dF-W→dF寄存器的內(nèi)容減去W寄存器的內(nèi)容,結(jié)果存入W(d=0)或F(d=1)中C,DC,Z
SUBLW KK-W→W8位立即數(shù)減掉W寄存器的內(nèi)容,結(jié)果存入WC,DC,Z
DECF F,dF-1→dF寄存器的內(nèi)容減1后,結(jié)果存入W(d=0)或F(d=1)中Z
邏 輯 運 算 類 ANDWF F,dF∧W→dW寄存器的內(nèi)容和F寄存器的內(nèi)容相與,結(jié)果存入F(d=1)或W(d=0)中Z
ANDLW KK∧W→WW寄存器的內(nèi)容和8位立即數(shù)相與,結(jié)果存入WZ
IORWF F,dF∨W→dW寄存器的內(nèi)容和F寄存器的內(nèi)容相或,結(jié)果存入F(d=1)或W(d=0)中Z
IORLW KK∨W→WW寄存器的內(nèi)容和8位立即數(shù)相或,結(jié)果存入WZ
XORWF F,dF⊕W→dW寄存器的內(nèi)容和F寄存器的內(nèi)容相異或,結(jié)果存入F(d=1)或W(d=0)中Z
XORLW KK⊕W→WW寄存器的內(nèi)容和8位立即數(shù)相異或,結(jié)果存入WZ
COMF F,dF取反→dF寄存器的內(nèi)容取反后,結(jié)果存入F(d=1)或W(d=0)中Z
CLRF F0→F,寄存器復(fù)位F寄存器的內(nèi)容被清為全0Z
CLRW -0→W,寄存器復(fù)位W寄存器的內(nèi)容被清為全0Z
RLF F,dF帶C循環(huán)左移→d將F寄存器帶C循環(huán)左移,結(jié)果存入F本身(d=1)或W(d=0)。C
RRF F,dF帶C循環(huán)右移→d將F寄存器帶C循環(huán)右移,結(jié)果存入F本身(d=1)或W(d=0)。C
BCF F,B將F中第B位清0將寄存器的第B位清為0-
BSF F,B將F中第B位置1將寄存器的第B位置1-
程 序 跳 轉(zhuǎn) 類 INCFSZ F,dF+1→d,結(jié)果若為0則跳一步F寄存器的內(nèi)容加1后,結(jié)果存入F本身(d=1)或W(d=0)。如結(jié)果為0則跳過下一條指令,否則順序執(zhí)行-
DECFSZ F,dF-1→d,結(jié)果若為0則跳一步F寄存器的內(nèi)容減1后,結(jié)果存入F本身(d=1)或W(d=0)。如結(jié)果為0則跳過下一條指令,否則順序執(zhí)行-
BTFSC F,BF中第B位為0,則跳一步測試F寄存器的第B位。若F(B)=0,則跳過下一條指令,否則順序執(zhí)行-
BTFSS F,BF中第B位為1,則跳一步測試F寄存器的第B位。若F(B)=1,則跳過下一條指令,否則順序執(zhí)行-
CALL K調(diào)用子程序首先將PC+1推入堆棧,然后將11位常數(shù)K送入PC(10~0),同時將PCLATH(4,3)→PC(12,11),從而使PC=子程序入口地址-
GOTO K 無條件跳轉(zhuǎn)將11位常數(shù)K送入PC(10~0),同時將PCLATH(4,3)→PC(12,11),從而使PC=新地址-
RETURN -從子程序返回將堆棧頂端單元的內(nèi)容彈出并送入PC,從而返回主程序斷點處-
RETLW KW帶參數(shù)子程序返回將堆棧頂端單元的內(nèi)容彈出并送入PC,同時8位常數(shù)K→W,從而帶著參數(shù)返回主程序斷點處-
RETFIE -從中斷服務(wù)子程序返回將堆棧頂端單元的內(nèi)容彈出并送入PC,從而返回主程序斷點處,同時將全局中斷使能位GIE置1,從新開放中斷-
控 制 類SLEEP -進入睡眠方式該指令執(zhí)行后,單片機進入低功耗睡眠模式,時基電路停振TO,PD
CLRWDT -0→WDT將WDT寄存器和分配給它的預(yù)分頻器同時清為全0TO,PD
NOP -空操作空操作
各大手機應(yīng)用商城搜索“拍明芯城”
下載客戶端,隨時隨地買賣元器件!